#include <k_api.h>
#include <aos/kernel.h>
#include "para_scan_task.h"
#include "img_cli_deal.h"

aos_sem_t para_inc_sem;
aos_sem_t para_inc_ready_sem;
aos_sem_t para_inc_complete_sem;


static void para_inc_task(void *arg)
{
    int i = 0, j = 0;
    int k = 0, m = 0;
    int n = 0;

    while (1) {
        aos_sem_wait(&para_inc_sem, AOS_WAIT_FOREVER);
        for (i = 0; i <= scan_para_list.count; i++) {
            for (j = 0; j <= scan_para_list.count; j++) {
                for (k = 0; k <= scan_para_list.count; k++) {
                    for (m = 0; m <= scan_para_list.count; m++) {
                        for (n = 0; n < scan_para_list.count; n++) {
                            scan_para_list.ov9282[2].data += scan_para_list.step;       /* gain */
                            aos_sem_signal(&para_inc_ready_sem);
                            aos_sem_wait(&para_inc_sem, AOS_WAIT_FOREVER);
                        }
                        scan_para_list.ov9282[2].data -= scan_para_list.step * n;
                        if (m == scan_para_list.count) 
                            break;
                        scan_para_list.ov9282[1].data += scan_para_list.step;           /* expoL */
                        aos_sem_signal(&para_inc_ready_sem);
                        aos_sem_wait(&para_inc_sem, AOS_WAIT_FOREVER);
                    }  
                    scan_para_list.ov9282[1].data -= scan_para_list.step * m;
                    if (k == scan_para_list.count) 
                        break;
                    scan_para_list.ov9282[0].data += scan_para_list.step;                /* expoH */
                    aos_sem_signal(&para_inc_ready_sem);
                    aos_sem_wait(&para_inc_sem, AOS_WAIT_FOREVER);
                }
                scan_para_list.ov9282[0].data -= scan_para_list.step * k;
                if (j == scan_para_list.count) 
                    break;
                scan_para_list.spk.data += scan_para_list.step;                         /* spk */
                aos_sem_signal(&para_inc_ready_sem);
                aos_sem_wait(&para_inc_sem, AOS_WAIT_FOREVER);
            }
            scan_para_list.spk.data -= scan_para_list.step * j;
            if (i == scan_para_list.count) 
                break;
            scan_para_list.ir.data += scan_para_list.step;                              /* ir */
            aos_sem_signal(&para_inc_ready_sem);
            aos_sem_wait(&para_inc_sem, AOS_WAIT_FOREVER);
        }
        printf("para inc complete.\n");
        aos_sem_signal(&para_inc_complete_sem);
        aos_task_exit(0);
    }
}

void para_inc_task_init(void)
{
    // uint32_t ret = 0;

    aos_sem_new(&para_inc_sem, 0);
    aos_sem_new(&para_inc_ready_sem, 0);
    aos_sem_new(&para_inc_complete_sem, 0);
    aos_task_new(PARA_INC_MODULE, para_inc_task, NULL, 10*1024);

    printf("para inc task created!\n");

    return;
}